home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / program / 3dview12.zip / 3D.HPP < prev    next >
C/C++ Source or Header  |  1996-05-28  |  4KB  |  116 lines

  1. struct _3D_Matrix {
  2.     double MXX,MXY,MXZ;
  3.     double MYX,MYY,MYZ;
  4.     double MZX,MZY,MZZ;
  5. };
  6.  
  7. class _3D_Point {
  8.     public:
  9.     _3D_Point() {};
  10.     _3D_Point( long A, long B, long C ) { X = A; Y = B; Z = C; };
  11.     double X,Y,Z;
  12.     long PX,PY;
  13.     double D;
  14.     char V;
  15. };
  16.  
  17. class _3D_Object {
  18.     public:
  19.     double D;
  20.     char V;
  21.     virtual void PrepareDraw(){};
  22.     virtual void Draw(){};
  23. };
  24.  
  25. enum _3D_Triangle_Typ { FlatShaded, FlatShadedZBuf,
  26.                          GouraudShaded, GouraudShadedZBuf,
  27.                          Textured, TexturedZBuf };
  28. enum _3D_Triangle_SideTyp { Singlesided, Doublesided };
  29. enum _3D_Triangle_MidPointTyp { Average, Rectangle, RectFourTri };
  30.  
  31. class _3D_Triangle : public _3D_Object {
  32.     public:
  33.     _3D_Triangle(){};
  34.     _3D_Triangle( long, long, long, DWORD = 0, _3D_Triangle_SideTyp = Singlesided,
  35.                   _3D_Triangle_MidPointTyp = Average, _3D_Triangle_Typ = GouraudShaded );
  36.     _3D_Triangle( long, long, long, long, long, long, long, long, long, void*,
  37.                   _3D_Triangle_SideTyp = Singlesided, _3D_Triangle_MidPointTyp = Average,
  38.                   _3D_Triangle_Typ = Textured );
  39.  
  40.     long PA,PB,PC;
  41.  
  42.     long Color;
  43.  
  44.     void *Texture;
  45.     long TXA,TYA,TXB,TYB,TXC,TYC;
  46.  
  47.     _3D_Triangle_Typ TriangleTyp;
  48.     _3D_Triangle_SideTyp SideTyp;
  49.     _3D_Triangle_MidPointTyp MidPointTyp;
  50.  
  51.     Boolean CalcDistance;
  52.  
  53.     double NX,NY,NZ;
  54.     double MX,MY,MZ;
  55.  
  56.     virtual void PrepareDraw();
  57.     virtual void Draw();
  58.  
  59.     void CalcNormal();
  60.     void CalcMidPoint();
  61.     void CommonInit();
  62. };
  63.  
  64. void _3D_InitMatrix_Rotate( _3D_Matrix &M,
  65.                             double sinPhi, double cosPhi,
  66.                             double sinGamma, double cosGamma,
  67.                             double sinOmega, double cosOmega );
  68. void _3D_InitRotation();
  69.  
  70. void _3D_SetEye( double X, double Y, double Z );
  71. void _3D_SetEye_Globe( double MX, double MY, double MZ, double Rad );
  72. void _3D_SetVParams( long MidX, long MidY, long MulX, long MulY );
  73. void _3D_SetAlpha( double A );
  74. void _3D_SetPhi( double A );
  75. void _3D_SetGamma( double A );
  76. void _3D_SetOmega( double A );
  77.  
  78. long _3D_NewPoint( double, double, double );
  79. double _3D_Point_GetX( long P );
  80. double _3D_Point_GetY( long P );
  81. double _3D_Point_GetZ( long P );
  82. void _3D_ProjectPoints( long = -1, long = -1 );
  83.  
  84. void _3D_RotatePointsForward( long Start, long End,
  85.                               double MX, double MY, double MZ, _3D_Matrix M );
  86.  
  87. void _3D_NewObject( _3D_Object* );
  88. void _3D_DrawObjects();
  89. void _3D_PrepareObjects();
  90. void _3D_SortObjects();
  91. void _3D_SortObjectsZ();
  92.  
  93. extern void (*_3D_TexturedTriangle) ( long, long, long, long, long, long, long, long,
  94.                                       long, long, long, long, void* );
  95. extern void (*_3D_FlatTriangle) ( long, long ,long, long, long, long, DWORD );
  96. extern void (*_3D_GouraudTriangle) ( long, long, DWORD, long, long, DWORD, long, long, DWORD );
  97. extern void (*_3D_FlatTriangleZBuf) ( long, long, double, long, long, double,
  98.                                         long, long, double, DWORD );
  99. extern void (*_3D_GouraudTriangleZBuf) ( long, long, double, DWORD, long, long,
  100.                                            double, DWORD, long, long, double, DWORD );
  101. extern void (*_3D_TexturedTriangleZBuf) ( long, long, long, long, double,
  102.                                            long, long, long, long, double,
  103.                                            long, long, long, long, double, void* );
  104. extern DWORD (*_3D_DistColor) ( double, DWORD );
  105.  
  106. extern double _3D_ScreenDistance;
  107. extern double _3D_EyeX, _3D_EyeY , _3D_EyeZ;
  108. extern double _3D_Alpha, _3D_SINAlpha, _3D_COSAlpha;
  109. extern double _3D_Phi, _3D_SINPhi, _3D_COSPhi, _3D_SINnPhi, _3D_COSnPhi;
  110. extern double _3D_Gamma, _3D_SINGamma, _3D_COSGamma, _3D_SINnGamma, _3D_COSnGamma;
  111. extern double _3D_Omega, _3D_SINOmega, _3D_COSOmega, _3D_SINnOmega, _3D_COSnOmega;
  112.  
  113. typedef void (*_3D_PointFunc)( _3D_Point& );
  114. void _3D_ForAllPointsDo( _3D_PointFunc P );
  115.  
  116.